1572. 矩阵对角线元素的和

1572. 矩阵对角线元素的和

Similar Question

Solution Tips

方案一: 遍历对角线

var diagonalSum = function(mat) {
    // 从小的矩阵开始计算, n = 1 or n = 2, 之后只需要每次加上四个角落即可
    const n = mat.length;
    let sum = 0;
    // 正方形矩阵, 一个变量即可
    let i = 0;

    // 计算主对角线
    while (i < n) {
        sum += mat[i][i];
        i++;
    }

    // 计算副对角线, 初始时 i === n
    i = n - 1;
    while (i >= 0) {
        sum += mat[n - 1 - i][i]
        i--;
    }

    // 不论奇数还是偶数都直接计算对角线就行, 如果是奇数就减去一次中点
    if (n % 2 === 1) {
        const mid = Math.floor(n / 2);
        sum -= mat[mid][mid]
    }

    return sum;
};

一次遍历

通过 i 和 n 的关系, 其实可以做到在一次遍历中计算完, 但是可能没有那么直观, 就这样吧